﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAL.Interfejsi;
using MySql.Data.MySqlClient;
using OOAD_PROJEKAT;

namespace DAL
{
    partial class DAL
    {
        public class DirektorDAO : IDaoCrud<Direktor>
        {
            protected MySqlCommand c;
            private DAL.OZaposlenikDAO vratiOZaposlenikDAO()
            {
                try
                {
                    DAL d = DAL.Instanca;
                    return d.getDAO.getOZaposlenikDAO();
                }
                catch (Exception e)
                {
                    throw e;
                }
            }
            private OZaposlenik ToOZaposlenik(Direktor p)
            {
                return new OZaposlenik(p.Id, p.Username, p.Ime, p.Prezime, p.Jmbg, p.Password, p.Plata, p.IdFilijale, p.Funkcija);
            }
            private Direktor ToDirektor(OZaposlenik p)
            {
                return new Direktor(p.Id, p.Username, p.Ime, p.Prezime, p.Jmbg, p.Password, p.Plata);
            }
            private List<Direktor> ToDirektori(List<OZaposlenik> zaposlenici)
            {
                List<Direktor> direktori = new List<Direktor>();
                foreach (OZaposlenik z in zaposlenici)
                {
                    direktori.Add(ToDirektor(z));
                }
                return direktori;
            }

            public long create(Direktor p)
            {
                try
                {
                    return vratiOZaposlenikDAO().create(ToOZaposlenik(p));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Direktor> getAll()
            {
                try
                {
                    return ToDirektori(vratiOZaposlenikDAO().getByExample("funkcija", "Direktor"));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }


            public Direktor read(Direktor p)
            {
                try
                {
                    OZaposlenik z = new OZaposlenik(vratiOZaposlenikDAO().read(ToOZaposlenik(p)));
                    return ToDirektor(z);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Direktor update(Direktor p)
            {
                try
                {
                    vratiOZaposlenikDAO().update(ToOZaposlenik(p));
                    return read(p);
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public void delete(Direktor p)
            {
                try
                {
                    vratiOZaposlenikDAO().delete(ToOZaposlenik(p));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public Direktor getById(int id)
            {
                try
                {
                    return ToDirektor(vratiOZaposlenikDAO().read(new OZaposlenik(id, "", "", "", "", "", 0, 0, "")));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

            public List<Direktor> getByExample(string name, string value)
            {
                try
                {
                    return ToDirektori(vratiOZaposlenikDAO().getByExampleSpec("Direktor", name, value));
                }
                catch (Exception e)
                {
                    throw e;
                }
            }

        }
    }
}